/**
 * 
 */
package test;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * <pre>
 * <b>.</b>
 * <b>Description:发送消息</b> 
 * 
 * <b>Author:</b> yufeng@yazhai.com
 * <b>Date:</b> 2015年8月17日 下午3:10:10
 * <b>Changelog:</b>
 *   Ver   Date                  Author              Detail
 *   ----------------------------------------------------------------------
 *   1.0   2015年8月17日 下午3:10:10    yufeng@yazhai.com     new file.
 * </pre>
 */
public class SendMsg {

	private static String USERNAME = ActiveMQConnection.DEFAULT_USER;

	private static String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;

	private static String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;

	public static void main(String[] args) {
		ConnectionFactory factory;// 链接创建工厂
		Connection connection = null;// 链接
		Session session = null;// 回话
		Destination desion;// 消息发送目的地
		MessageProducer message = null; // 消息生产者

		// 实例化链接工厂
		factory = new ActiveMQConnectionFactory(SendMsg.USERNAME,
				SendMsg.PASSWORD, SendMsg.BROKERURL);

		try {
			// 实例化链接
			connection = factory.createConnection();
			connection.start();// 启动链接
			// 创建Session true 、false :第一个是否有事物
			// 确认方式
			// Session.AUTO_ACKNOWLEDGE 自动确定 当客户端 从onMessage 方法成功读取消息并返回的时候回自动确认
			//
			session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
			// 创建消息队列
			desion = session.createQueue("测试消息");
			// 创建消息生产者
			message = session.createProducer(desion);
			sendMsg(session, message);
			// 设置有事物 session 必须提交才算真正意义上的发送消息
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (message != null) {
					message.close();
				}
				if (session != null) {
					session.close();
				}
				if (connection != null) {
					connection.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

	/**
	 * 发送消息
	 * 
	 * @param session
	 *            会话
	 * @param message
	 *            消息生产者
	 */
	public static void sendMsg(Session session, MessageProducer message) {
		try {
			for (int i = 0; i < 15; i++) {
				System.out.println("测试发送消息:" + i);
				// 创建文本方式的消息体
				// 有 object、byte map stream text 类型的消息体
				TextMessage msg = session.createTextMessage("测试发送消息:" + i);
				message.send(msg);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
